import { Component, ReactNode } from 'react';

// 高阶组件 : 本身是一个函数 : 参数 : 组件  返回值 : 新的组件

// 构造函数类型 : 函数类型前面加一个new 就表示构造函数类型
type ConstructorType =
  | (new (...args: any[]) => any)
  | ((...args: any[]) => JSX.Element);

interface IType {
  readonly [key: string]: any;
}

export default function BeforeRoter(Com: ConstructorType) {
  return class MyComponent extends Component<IType, IType> {
    state: IType;

    constructor(props: IType) {
      super(props);
      this.state = {
        username: localStorage.getItem('token'),
      };
    }

    // componentDidMount() {}

    render(): ReactNode {
      return <div>{this.state.username ? <Com /> : <h1>401</h1>}</div>;
    }
  };
}

// class Demo {
//   get() {
//     return '123';
//   }
// }

// BeforeRoter(Demo);
